package hot_100;

/**
 * @author: Darven
 * @createTime: 2025-09-30  23:37
 * @description: TODO
 */
public class P21 {

    public static void main(String[] args) {
        // 构造测试用例1: 正常情况
        // list1: 1 -> 2 -> 4
        ListNode list1 = new ListNode(1);
        list1.next = new ListNode(2);
        list1.next.next = new ListNode(4);

        // list2: 1 -> 3 -> 4
        ListNode list2 = new ListNode(1);
        list2.next = new ListNode(3);
        list2.next.next = new ListNode(4);
        P21 p21 = new P21();
        // 合并两个链表
        ListNode result = p21.mergeTwoLists(list1, list2);

        // 打印结果
        System.out.print("Test 1 - Merged list: ");
        while (result != null) {
            System.out.print(result.val + " ");
            result = result.next;
        }
        System.out.println();
    }

    //    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//        if(list1==null){
//            return list2;
//        }
//        if(list2==null){
//            return list1;
//        }
//        ListNode ans;
//        ListNode current;
//        if(list1.val<=list2.val){
//            ans=new ListNode(list1.val,list1);
//            list1=list1.next;
//        }else{
//            ans=new ListNode(list2.val,list2);
//            list2=list2.next;
//        }
//        current=ans;
//
//
//        while (list1!=null&&list2!=null){
//            if(list1.val<list2.val){
//                current.next=new ListNode(list1.val,list1);
//                list1=list1.next;
//
//            }else{
//                current.next=new ListNode(list2.val,list2);
//                list2=list2.next;
//            }
//            current=current.next;
//        }
//
//        current.next=(list1!=null)?list1:list2;
//
//        return ans;
//    }
//    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//        ListNode ans = new ListNode(-1);
//        ListNode cur = ans;
//        while (list1 != null && list2 != null) {
//            if (list1.val < list2.val) {
//                cur.next = list1;
//                list1 = list1.next;
//            } else {
//                cur.next = list2;
//                list2 = list2.next;
//            }
//            cur = cur.next;
//        }
//        cur.next = list1 == null ? list2 : list1;
//        return ans.next;
//    }
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if(list1==null){
            return list2;
        } else if (list2==null) {
            return list1;
        } else if (list1.val<list2.val) {
            list1.next=mergeTwoLists(list1.next, list2);
            return list1;
        } else{
            list2.next=mergeTwoLists(list1, list2.next);
            return list2;
        }
    }

}

